package br.com.merks.service;

import java.util.List;

import br.com.merks.model.Market;
import br.com.merks.model.MarketAnswer;
import br.com.merks.model.MarketComment;
/**
 * Interface responsavel por gerenciar as questoes
 * @date 21/12/2009
 * @author Yuri Feitosa Negocio
 * Alteracoes
 * 
 * @author yurinegocio@gmail.com @date 21/12/2009 @comment Versao Inicial 
 */
public interface MarketService {
	/**
	 * Busca um item no repositorio de dados atraves do identificador .getId()
	 * @param question
	 * @return 
	 */
	public Market find(Market question);
	/**
	 * Lista os mercados mais acessados no banco de dados
	 * @return Lista de Questoes
	 */
	public List<Market> listTopMarkets(int topSize);
	/**
	 * Lista os mercados mais recentes no banco de dados
	 * @return Lista de Questoes
	 */
	public List<Market> listLastMarkets(int topSize);
	/**
	 * Lista todos os mercados publicados no banco de dados
	 * @return Lista de Questoes
	 */
	public List<Market> list();
	/**
	 * Adiciona um item ao respositorio de dados
	 * @param question
	 * @return
	 */
	public Market add(Market question);
	/**
	 * Remove todos os itens do repositorio de dados
	 */
	public void deleteAll();
	/**
	 * Armazena um item e associa o relacionamento com as possiveis respostas 
	 * @param question
	 * @param questionAnswers
	 * @return O item armazenado
	 */
	public Market store(Market question, List<MarketAnswer> questionAnswers);
	/**
	 * Busca no repositorio de dados as respostas baseada no item
	 * @param question
	 * @return
	 */
	public List<MarketAnswer> findAnswersByMarket(Market question);
	
	
	/**
	 * Adiciona no repositorio de dados um comentario associado ao mercado
	 * @param marketComment
	 */
	public void addMarketComment(MarketComment marketComment);
	/**
	 * Lista todos os comentarios associados a um mercado
	 * @param market
	 * @return
	 */
	public List<MarketComment> findCommentsByMarket(Market market);
	
	/**
	 * Remove um comentario em especifico
	 * @param marketComment
	 * @return
	 */
	public MarketComment deleteMarketComment(MarketComment marketComment);
}
